<!DOCTYPE html>
<script src="../../resources/js-test.js"></script>
<body contenteditable="true">
<p id="p"><span id="span" contenteditable="false" style="display: inline-block; height: 10mm; width:10mm; background-color:yellow;"></span></p>
<div id="console"></div><!-- to keep the test target at the top of the document -->
<script>
description('This confirms that settin the caret before an empty non-editable inline-block element with height.');

var sel = getSelection();
var range = document.createRange();
var p = document.getElementById('p');
range.setStart(p, 0);
range.setEnd(p, 0); // not needed, but to ensure the same code path as bug 428986
sel.removeAllRanges();
sel.addRange(range);
shouldBe('getSelection().rangeCount', '1');
shouldBe('getSelection().anchorNode', 'p');
shouldBe('getSelection().anchorOffset', '0');
shouldBe('getSelection().anchorNode', 'getSelection().focusNode');
shouldBe('getSelection().anchorOffset', 'getSelection().focusOffset');
caretShouldBe('span.getBoundingClientRect().left');

sel.modify('move', 'forward', 'character');
shouldBe('getSelection().rangeCount', '1');
shouldBe('getSelection().anchorNode', 'p');
shouldBe('getSelection().anchorOffset', '1');
shouldBe('getSelection().anchorNode', 'getSelection().focusNode');
shouldBe('getSelection().anchorOffset', 'getSelection().focusOffset');
caretShouldBe('span.getBoundingClientRect().right', 2);

function caretShouldBe(expected, tolerance) {
    if (!window.internals) {
        debug("TEST SKIPPED, cannot test the caret position without window.internals");
        return;
    }
    shouldBe('internals.absoluteCaretBounds().left', expected, false, tolerance);
}
</script>
</body>
